﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Data;
using System.Text;
using System.Windows.Forms;
using ComponentFactory.Krypton;
using System.Data.SQLite;
using System.Diagnostics;

namespace MwanaDOC
{
    public partial class ctrlListarDocumentosPorDisciplina : UserControl
    {
        LogToFile log = new LogToFile();
        Materia mat = new Materia();
        Documento doc = new Documento();

        private string _disciplina;

        public ctrlListarDocumentosPorDisciplina(string disciplina)
        {
            InitializeComponent();

            _disciplina = disciplina;
        }

        private static ctrlListarDocumentosPorDisciplina _instance;
        public static ctrlListarDocumentosPorDisciplina getInstance(string codDisciplina)
        {
            if (_instance == null)
            {
                _instance = new ctrlListarDocumentosPorDisciplina(codDisciplina);
            }
            return _instance;
        }

        /// <summary>
        /// Retorna a lista das disciplinas
        /// </summary>
        private void getListaDisciplina()
        {
            DataSet lstDisciplinas = new DataSet();
            SQLiteDataReader leitor = null;
            

            try
            {
                //lstDisciplinas = mat.getListaDisciplinas();
                leitor = mat.getListaDisciplinas();

                while (leitor.Read())
                {
                    cbxDisciplina.Items.Add(leitor.GetString(1));
                }
            }
            catch (Exception e)
            {
                log.log(this.GetType().Name, "ListarDocumentosPorDisciplina.getListaDisciplina", e.Message, e.StackTrace); 
            }

            cbxDisciplina.DataSource = lstDisciplinas;
            //cbxDisciplina.DisplayMember = "Materia.Nome";
            //cbxDisciplina.ValueMember = "Materia.Nome";
        }

        private void painelPrincipal_Paint(object sender, PaintEventArgs e)
        {
           
        }

        private void ctrlListarDocumentosPorDisciplina_Load(object sender, EventArgs e)
        {
            getListaDisciplina();
            cbxDisciplina.SelectedItem = _disciplina;
            dataBindBuscaPorDisciplina();
            cbxDisciplina.SelectedValueChanged += new EventHandler(cbxDisciplina_SelectedValueChanged1);
        }
        
       
        void cbxDisciplina_SelectedValueChanged1(object sender, EventArgs e)
        {
            dataBindBuscaPorDisciplina();

        }
         #region MyRegion
        private void cbxDisciplina_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        private void cbxDisciplina_SelectedValueChanged(object sender, EventArgs e)
        {

        } 
        #endregion

        private void dataBindBuscaPorDisciplina()
        {
            int id;
            BindingSource bsResultados = null;
            try
            {
                //id = int.Parse(cbxDisciplina.SelectedValue.ToString());
                //bsResultados = doc.getByIdMateria(id);
                string nome = cbxDisciplina.SelectedItem.ToString();
                bsResultados = doc.getByNomeMateria(nome);
            }
            catch (Exception e)
            {
                log.log(this.GetType().Name, "ListarDocumentosPorDisciplina.dataBindBuscaPorDisciplina", e.Message, e.StackTrace);
            }
            dgvResultados.DataSource = bsResultados;
            dgvResultados.Refresh();

            if (bsResultados.Count <= 0)
            {
                gbxResultado.Text = "Nenhum arquivo encontrado";
            }
            else if (bsResultados.Count == 1)
            {
                gbxResultado.Text = "Resultado";
            }
            else
            {
                gbxResultado.Text = "Resultados";
            }

        }

        private void dgvResultados_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
           
        }

        private void dgvResultados_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int indice = e.RowIndex;
            AbrirDocumento(indice);
        }

        private void AbrirDocumento(int indice)
        {
            // Documento doc1 = new Documento();
            string endereco;
            //Prevenindo o ArgumentAutOfBound Exception
            try
            {
                string _titulo = dgvResultados.Rows[indice].Cells[1].Value.ToString();
                endereco = doc.getDocPath(_titulo);
                Process.Start(endereco);
            }
            catch (ArgumentOutOfRangeException index)
            {
                log.log(this.GetType().Name, "AbrirDocumento", index.Message,  index.StackTrace);
            }
            catch (FileNotFoundException index)
            {
                MessageBox.Show("Arquivo não encontrado");
                log.log(this.GetType().Name, "AbrirDocumento", index.Message,  index.StackTrace);
                
            }
            catch (Exception index)
            {

                MessageBox.Show("Não foi completar operação\nPossível causa: Arquivo não existe", "Erro inesperado!");
                log.log(this.GetType().Name, "AbrirDocumento", index.Message,  index.StackTrace);
            }
            //MessageBox.Show(_titulo);
        }

        private void dgvResultados_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            btnAbrir.Enabled = true;
            btnEditar.Enabled = true;
            btnApagar.Enabled = true;
        }

        private void btnAbrir_Click(object sender, EventArgs e)
        {
            try
            {
                int indice = dgvResultados.CurrentRow.Index;
                AbrirDocumento(indice);
            }
            catch (Exception ex)
            {
                log.log(this.GetType().Name, "ListarDocumentosPorDisciplina.btnAbrir_Click", ex.Message, ex.StackTrace);
            }
        }

        private void btnApagar_Click(object sender, EventArgs e)
        {
            int _cod;
            try{
                int indice = dgvResultados.CurrentRow.Index;
                //string _titulo = dgvResultados.Rows[indice].Cells[1].Value.ToString();
                string cod = dgvResultados.Rows[indice].Cells[0].Value.ToString();
                _cod = int.Parse(cod);
                if (doc.ApagarDoc(_cod))
                {
                    MessageBox.Show("Documento apagado com sucesso");
                    dgvResultados.Rows.Remove(dgvResultados.CurrentRow);
                    dgvResultados.Refresh();
                }
                else
                    MessageBox.Show("Impossível apagar o documento");
            }
            catch (Exception erro)
            { 
                //não faça nada
                log.log(this.GetType().Name, "ListarDocumentosPorDisciplina.btnApagar_Click", erro.Message, erro.StackTrace);
            }

            //string endereco = doc.getDocPath(_titulo);

            

        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            Documento documento = new Documento();
            BuscaEdita bEditaDoc = new BuscaEdita();
            try
            {
                int indice = dgvResultados.CurrentRow.Index;
                string cod = dgvResultados.Rows[indice].Cells[0].Value.ToString();
                int _cod = int.Parse(cod);
                documento = bEditaDoc.buscaEditaDocumento(_cod);

                cadDoc caddoc = cadDoc.getFrmFilho(Global.Modo.Atualizar, documento);

                painelPrincipal.Controls.Clear();
                painelPrincipal.Controls.Add(caddoc);

                caddoc.Dock = DockStyle.Fill;
                caddoc.Visible = true;
            }
            catch (Exception exep)
            { 
                //não faça nada
                log.log(this.GetType().Name, "ListarDocumentosPorDisciplina.btnEditar_Click", exep.Message, exep.StackTrace);
            }

           
           

        }

        
    }
}
